package cn.wzx.service;

import cn.wzx.dao.BlogDao;
import cn.wzx.dao.BlogTypeDao;
import cn.wzx.dao.BokeDao;
import cn.wzx.entity.BlogType;
import cn.wzx.entity.Blogger;
import cn.wzx.entity.Boke;
import cn.wzx.util.SessionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class BlogServiceImpl implements BlogService {
    @Autowired
    BlogDao blogDao;

    @Autowired
    BlogTypeDao blogTypeDao;

    @Autowired
    BokeDao bokeDao;

    @Override
    public void add(Boke boke, Blogger blogger) {
        System.out.println("boke==="+boke);
        String id = bokeDao.add(boke);//正文ID
        System.out.println("id==="+id);
        blogger.setBokeId(id);//正文ID
        blogger.setUid(SessionUtils.getUid());
        BlogType type = blogTypeDao.findById(blogger.getTypeId());
        System.out.println("type==="+type);
        type.setNum(type.getNum()+1);
        blogDao.add(blogger);//添加博客
        blogTypeDao.add(type);
    }

    @Override
    public List<Blogger> findBlogsByTypeId(String typeId) {
        return blogDao.findBlogsByTypeId(typeId);
    }

    @Override
    public Map<String, Object> read(String blogId) {
        Blogger blog = blogDao.read(blogId);
        Boke boke = bokeDao.findOneBody(blog.getBokeId());
        blog.setPageviews(blog.getPageviews()+1);
        blogDao.add(blog);
        Map<String,Object> map = new HashMap<>();
        map.put("blog",blog);
        map.put("boke",boke);
        return map;
    }

    @Override
    public List<Blogger> findByTitle(String title) {
        List<Blogger> lst = blogDao.findByTitle(title);
        System.out.println("lst==="+lst);
        return lst;
    }

    @Override
    public List<Blogger> fingBlogsByUid() {
        String uid = SessionUtils.getUid();
        return blogDao.fingBlogsByUid(uid);
    }

    @Override
    // 删除用到了软删除，只删除了博客的显示，但是正文以及该正文对应的uid还存在正文数据表中没有进行删除
    // 以便于日后能找到该用户的博客
    public void del(String blogid,String typeid) {
        // 根据博客类别ID找到该类别
        BlogType type = blogTypeDao.findById(typeid);
        // 删除 主页类别显示数量应当减一
        type.setNum(type.getNum()-1);
        blogTypeDao.add(type);
        blogDao.del(blogid);
    }

    @Override
    public int addLike(String blogid, String userid) {
        Blogger blog = blogDao.findBlogById(blogid);
        List<String> likeusers = blog.getLikeusers();
        if (likeusers!=null&&likeusers.contains(userid)){
            blog.setLikenum(blog.getLikenum()-1);
            likeusers.remove(userid);
            blog.setLikeusers(likeusers);
            blogDao.add(blog);
            return 0;
        }
        blog.setLikenum(blog.getLikenum()+1);
        likeusers.add(userid);
        blog.setLikeusers(likeusers);
        blogDao.add(blog);
        return 1;
    }

}
